ツェラーの公式#include<stdio.h> int zeller(int, int, int); /* ツェラーの公式の処理をする関数のプロトタイプ宣言 */ #define WEEK 7 /* 1週間は7日なので */ #define MAXMOJI 10 /* 最大文字数 */ int main() { int kekka, year, month, day; char buffer[MAXMOJI], weekday[WEEK][MAXMOJI] = { "日曜日", "月曜日", "火曜日", "水曜日", "木曜日", "金曜日", "土曜日" }; /* 結果として0が日曜、1が月曜、…6が土曜なので 日曜が一番最初としてあります */ printf("ツェラーの公式プログラム\n\n"); printf("何年の何月何日の曜日が知りたいかを入力して下さい\n"); printf("何年かを入力して下さい--->"); fgets(buffer, sizeof(buffer), stdin); sscanf(buffer, "%d", &year); printf("何月かを入力して下さい--->"); fgets(buffer, sizeof(buffer), stdin); sscanf(buffer, "%d", &month); printf("何日かを入力して下さい--->"); fgets(buffer, sizeof(buffer), stdin); sscanf(buffer, "%d", &day); kekka = zeller(year, month, day); /* 引数として年、月、日を渡す */ printf("\n%d年%d月%d日は%sです\n", year, month, day, weekday[kekka]); /* weekday[kekka]はkekkaが0とすると日曜日となります(二十一章参照) */ return 0; } int zeller(int y, int m, int d) { int value; if(m == 1 || m == 2) { --y; /* 1,2月は前の年の13,14月として扱うため1年戻すために-1をする */ m += 12; /* 1,2月は前の年の13,14月として扱うため12を足す */ } value = (y + y / 4 - y / 100 + y / 400 + (13 * m + 8) / 5 + d) % 7; /* (年 + 年 / 4 - 年 / 100 + 年 / 400 + (13 * 月 + 8) / 5 + 日) を7で割った余りというツェラーの公式そのもの */ return value; /* 公式の結果を戻り値とする */ } ジャンル別一覧
人気のクチコミテーマ
|